题目描述
编写一个函数来查找字符串数组中的最长公共前缀。
思路:利用队列,先存入第一个字符串的每一位字符,然后依次与第二个字符串的每位比较,相同的继续存入,不同则跳出循环,比较下一个字符串,直至所有字符串比较结束。
注意:牛客网输出要求是String,因此对于结果还需要将每个字符合并成字符串
对于队列中存储的Character型字符,可以将字符串的char型字符转换为Character再利用equals()方法比较
import java.util.*;
public class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs==null||strs.length==0)
return "";
Queue<Character> queue=new LinkedList<Character>();
for(int i=0;i<strs.length;i++){
if(strs[i].equals(""))
return "";
if(i==0){
for(int j=0;j<strs[i].length();j++){
queue.add(strs[i].charAt(j));
}
}
else{
Queue<Character> temp=new LinkedList<Character>();
for(int j=0;j<strs[i].length();j++){
if(Character.valueOf(strs[i].charAt(j)).equals(queue.poll())){
temp.add(strs[i].charAt(j));
}
else{
break;
}
}
queue=temp;
}
}
String res=new String();
while(!queue.isEmpty()){
res=res+queue.poll();//字符合并字符串
}
return res;
}
}
下面是IDE调试的方法:
package substring;
import java.util.Scanner;
import java.util.Queue;
import java.util.LinkedList;
public class solution{
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
String s=scan.nextLine();
scan.close();
String[] str=s.split(" ");
Queue<Character> queue=new LinkedList <Character>();
for(int i=0;i<str.length;i++){
if(str[i].equals(""))
System.out.print("");
String temp=str[i];
Queue<Character> qtemp=new LinkedList<Character>();
if(i==0){
for(int j=0;j<temp.length();j++){
queue.add(temp.charAt(j));
}
}
else{
for(int j=0;j<temp.length();j++){
if(Character.valueOf(temp.charAt(j)).equals(queue.poll())){
qtemp.add(temp.charAt(j));
}
else{
break;
}
}
queue=qtemp;
}
}
String res=new String();
while(!queue.isEmpty()){
res=res+queue.poll();
}
System.out.print(res);
return;
}
}