java 查找两个字符串的最长公共前缀

ev7lccsx  于 2022-12-28  发布在  Java
关注(0)|答案(4)|浏览(185)

我想找到两个字符串最长的公共前缀。有没有办法循环我的最后两个if语句,这样我就可以在最后两个不匹配的字符处结束?

System.out.println("Enter the first string: ");
String s = input.nextLine();

System.out.println("Enter the second string: ");
String s2 = input.nextLine();

//check if first characters are same
if (s.charAt(0) != s2.charAt(0)) {
  System.out.println(""+s+ " and "+s2+ " have no common prefix");
  System.exit(0);
    }

if (s.charAt(0) == s2.charAt(0))
  System.out.print(" "+s.charAt(0));

if (s.charAt(0) == s2.charAt(0))
  System.out.print(" "+s.charAt(1));

if (s.charAt(0) == s2.charAt(0))
  System.out.print(" "+s.charAt(2));  
  }
}

示例:

Enter first string: Welcome to c++

Enter second string: Welcome to java

代码应返回Welcome to作为公共前缀。

ikfrs5lh

ikfrs5lh1#

试试这个。2我想这就是你想要达到的目标。3如果这是正确的,我会在后面补充说明

import java.util.*;
import java.lang.*;
import java.io.*;

class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        String s = "Hello Wo";
        String s2 = "Hello World";
        String small,large;
         if(s.length() > s2.length()) 
            {small = s2;large = s;}
          else
            {small = s;large = s2;}
        int index = 0;    
        for(char c: large.toCharArray())
        {
            if(index==small.length()) break;
            if(c != small.charAt(index)) break;
            index++;
        }
        if(index==0)
          System.out.println(""+s+ " and "+s2+ " have no common prefix");
        else
          System.out.println(large.substring(0,index));
    }
}

编辑:

1.我找到较大的字符串并选择它作为外部字符串进行循环

  1. toCharArray()将字符串转换为字符,以便您可以使用Java的foreach循环字符串中的每个字符(有关详细信息,请单击1(https://stackoverflow.com/questions/2451650/how-do-i-apply-the-for-each-loop-to-every-character-in-a-string))
  • 在循环内部,您应该在两个条件下退出
  • 字符串的结尾(我使用length来查找是否到达了较小字符串的结尾)
  • 两个字符串之间不再有匹配字符
  • 递增索引,直到出现上述情况之一
  • 当您退出for循环时,index将包含两个字符串连续相等的最后一个索引。
  • 如果索引= 0,则只说不匹配,否则打印从0到index的字符
41zrol4v

41zrol4v2#

可能是这样的:

int sLength = s.length(),
    s2Length = s2.length(),
    minLength = (sLength < s2Length) ? sLength : s2Length;

for (int i = 0; i < minLength; i++) {
    if (s.charAt(i) == s2.charAt(i)) {
        System.out.println(s.charAt(i));
    }
    else {
        break;
    }
}

但你的问题最好能有更多的细节。

**编辑:**这取决于@afrojuju_想做什么。这并不清楚。可以添加一些更多的逻辑来完成所需的行为。
**编辑2:**添加了@JavaBeast指出的字符串长度比较。

uxh89sit

uxh89sit3#

public static String LcpFinder (String s1 , String s2){

    if (s1 == null || s2 == null){
        throw new IllegalArgumentException();
    }

    int minLength = 0;

    if (s1.length() < s2.length()){
        minLength = s1.length();
    }
    else{
        minLength = s2.length();
    }

    for (int i = 0 ; i < minLength ; i++){

        if(s1.charAt(i) == s2.charAt(i)){
            continue;
        }
        else{
            return s1.substring(0,i);
        }           
    }
    return s1.substring(0,minLength); 
}
7hiiyaii

7hiiyaii4#

尝试使用以下代码块:

str1 = input().lower()
    str2 = input().lower()
    
    for i in range(min(len(str1),len(str2))):
        if str1[i] != str2[i]:
            break
    
    if i == 0:
        print(-2)
    else:
        print(str1[:i])

相关问题